#include "elevation_calculator.h"
#include <iostream>
#include <fstream>
#include <limits>

// 创建一个简单的测试数据文件
void createTestDataFile(const std::string& filePath) {
    std::ofstream testFile(filePath);
    if (testFile.is_open()) {
        // 添加一些测试数据点
        testFile << "121.0,31.0,50.5\n";
        testFile << "121.5,31.0,60.2\n";
        testFile << "121.0,31.5,70.8\n";
        testFile << "121.5,31.5,80.3\n";
        testFile << "122.0,31.0,45.6\n";
        testFile << "122.0,31.5,90.1\n";
        testFile.close();
        std::cout << "已创建测试数据文件: " << filePath << std::endl;
    } else {
        std::cerr << "无法创建测试数据文件" << std::endl;
    }
}

int main() {
    std::cout << "=== 经纬度高程计算器 ===" << std::endl;
    
    // 创建高程计算器实例
    ElevationCalculator calculator;
    
    // 定义测试数据文件路径
    std::string dataFilePath = "elevation_data.txt";
    
    // 检查并创建测试数据文件
    if (!calculator.loadElevationData(dataFilePath)) {
        std::cout << "未找到高程数据文件，正在创建测试数据..." << std::endl;
        createTestDataFile(dataFilePath);
        calculator.loadElevationData(dataFilePath);
    }
    
    if (!calculator.isDataLoaded()) {
        std::cerr << "错误: 无法加载高程数据，程序将退出" << std::endl;
        return 1;
    }
    
    // 交互式命令行界面
    std::cout << "\n交互式高程查询（输入 'q' 退出）" << std::endl;
    std::cout << "请输入经纬度（格式: 经度,纬度）: " << std::endl;
    
    std::string input;
    while (true) {
        std::cout << ">> ";
        std::getline(std::cin, input);
        
        // 检查是否退出
        if (input == "q" || input == "Q") {
            break;
        }
        
        // 解析输入的经纬度
        size_t commaPos = input.find(',');
        if (commaPos == std::string::npos) {
            std::cout << "格式错误！请使用 '经度,纬度' 格式" << std::endl;
            continue;
        }
        
        try {
            double longitude = std::stod(input.substr(0, commaPos));
            double latitude = std::stod(input.substr(commaPos + 1));
            
            // 计算高程
            double elevation = calculator.calculateElevation(longitude, latitude);
            
            // 显示结果
            std::cout << "经纬度 (" << longitude << ", " << latitude 
                      << ") 的高程为: " << elevation << " 米" << std::endl;
        } catch (const std::exception& e) {
            std::cout << "输入错误: " << e.what() << std::endl;
            std::cout << "请重新输入有效的经纬度" << std::endl;
        }
    }
    
    std::cout << "\n感谢使用高程计算器，再见！" << std::endl;
    return 0;
}